#!/usr/bin/env python
#coding=utf-8
'''
Created on Sep 14, 2010
@author: lxd
'''
import common.PyV8 as PyV8
import hashlib
import datetime
import tools
import wx
import cStringIO

log = tools.log
def parseHelper(func):
    def wrapper(*args, **kw):
        log.debug('[function]%s' % func.__name__)
        if args:
            log.debug('[init]%s' % str(args))
        if kw:
            log.debug('[init]%s' % str(kw))
            
        try:
            result = func(*args, **kw)
            if isinstance(result, list):
                log.debug('[result]%s' % [i.__dict__ for i in result]) 
            else:
                if result.__dict__ == {}:
                    result = None
                log.debug('[result]%s' % result.__dict__) 
            return result            
        except Exception, err:
            log.error(err)

    wrapper.__doc__ = func.__doc__
    return wrapper

class Item:
    #基本结构
    pass
#########################################
def __pGet(pwd):
    f = open(r'D:/workspace/qx/src/common/comm.js', 'r')
#    f = open(r'../common/comm.js', 'r')
    data = f.read()
    f.close()    
    ctxt = PyV8.JSContext() 
    ctxt.enter()  
    p = ctxt.eval(data)
    return p(pwd)

def getP(pwd, verifyCode):
    #get p to post
    password_md5_3 = __pGet(pwd)
    m = hashlib.md5(password_md5_3 + verifyCode)
    password = m.hexdigest()
    return password

def checkLogin(f):
    content = f.read()
    s = content.split("'")
    c = int(s[1])
    a = int(s[3])
    LOGIN_FAIL_ERRMSG = [u'登录成功!', u'系统繁忙，请稍后重试。', u'已经过期的QQ号码。', u'您输入的密码有误，请重试。', u'您输入的验证码有误，请重试。', u'校验失败。', u'密码错误。如果您刚修改过密码, 请稍后再登录.', u'您的输入有误, 请重试。', u'您的IP输入错误的次数过多，请稍后再试。', u'您输入的帐号不存在，请重试。', u'您输入的帐号不正确，请重试。', u'您输入的帐号不正确，请重试。', u'已经过期的QQ号码。', u'', u'该QQ号码已经转换为Email帐号，请使用Email帐号登录。', u'', u'您的IP输入错误的次数过多，请稍后再试。', u'', u'您的Email帐号未进行验证，请验证后再登录。', u'很抱歉，您的号码暂时不能登录，请联系客服中心。', u'很抱歉，您的号码暂时不能登录，请联系客服中心(20)。']
    EXT_RES_MSG = [u'页面过期，请重试!', u'登录失败，请重试!']
    if c == 0:
        return True
    else:
        if  a == 0:
            try:
                log.error(LOGIN_FAIL_ERRMSG[c])
            except:
                log.error(u'系统繁忙')
        else:
            log.error(EXT_RES_MSG[a - 2])
        return False
    
def parseImg(f):
    data = f.read()
    stream = cStringIO.StringIO(data)
    image = wx.ImageFromStream(stream)
    bitmap = wx.BitmapFromImage(image) 
    return bitmap
        
###########################################
@parseHelper    
def enterGame(data):
    ''' 
    >>> s={'accId': 375313961.0, 'expLimit': 49000, 'intelPoint': 0, 'userId': 83085, 'headIcon': None, 'titleExpireDttm': None, 'militaryLimit': 200, 'lastLoginDttm': datetime.datetime(2010, 9, 15, 13, 33, 52, 887000), 'title': None, 'createDate': datetime.datetime(2010, 8, 25, 12, 55, 16), 'pvpNum': 0, 'waitQueLen': 0, 'castleList': None, 'hexagram': 0, 'junGong': 0, 'lvParaLimit': {'maxHonorMissionLevel': 3, 'IRemoteObjectState': 0, 'money': 0, 'tacticLimit': 120, 'expPointLimit': 48000, 'honorMissNum': 5, 'tipContent': u'', 'militaryLimit': 200, 'resource': 0, 'rankName': u'Lv.24', 'armyNumLimit': 12000, 'actionPoint': 670, 'tipTitle': u'', 'minHonorMissionLevel': 2, 'rankId': 24, 'cityNum': 1, 'propertyPoint': 3900, 'skillPointLimit': 125, 'pvpNum': 10, 'honor': 990, 'polityLimit': 200, 'picPath': u'3.png', 'hexHonor': 150, 'skillPoint': 0, 'intelLimit': 200, 'rankDesc': u'', 'achieve': 0}, 'achieve': 0, 'warStatus': 10, 'IRemoteObjectState': 0, 'buiQueLen': 2, 'currGuide': u'1001', 'finalMilitaryPoint': 45, 'dailyGiftDttm': datetime.datetime(2010, 9, 14, 11, 22, 33), 'guildFlag': None, 'dutyName': u'', 'cash': 0, 'protectStatus': 0, 'guildName': None, 'availPropertyPoint': 0, 'finalIntelPoint': 0, 'polityLimit': 200, 'tacticPoint': 120, 'intelLimit': 200, 'skillLimit': 125, 'laveNum': 3, 'militaryPoint': 45, 'payPoint': 198, 'skillPoint': 0, 'tacticLimit': 120, 'influence': 0, 'sex': 2, 'protectEndDttm': None, 'IExportOpCode': 0, 'guildId': -1, 'guildAward': 1, 'finalPolityPoint': 1, 'countryId': 5, 'onlineFlag': False, 'usedActPoint': 0, 'titleId': 0, 'rankIndex': 0, 'honorNum': 0, 'rankName': u'Lv.24', 'selfSignature': u'\u8fd9\u4e2a\u4eba\u5f88\u61d2\uff0c\u975e\u5e38\u61d2\uff0c\u7279\u522b\u61d2', 'prayTimes': 0, 'influenceRank': 25022, 'lasAwardDttm': datetime.datetime(2010, 8, 25, 14, 23, 29), 'polityPoint': 1, 'expPoint': 1165, 'armyNumLimit': 16500, 'prestige': 300, 'icon': u'user2_19.jpg', 'userName': u'Cicii', 'lastActDmDttm': datetime.datetime(2010, 9, 15, 3, 17, 36), 'casNum': 1, 'rankId': 24, 'hexDate': None, 'olTime': 69900, 'defUser': 1, 'honor': 524, 'constituteNum': 3}
    >>> enterGame(s).userId
    83085
    '''
    item = Item()
    item.userName = data['userName']# u'Cicii'
    item.accId = data['accId']#375313961.0
    item.userId = data['userId']#83085
    if data['sex'] == 1:
        item.sex = u'男'
    elif data['sex'] == 2:
        item.sex = u'女'
    item.icon = 'http://cdn.dl.7.qq.com/dynasty/swf/pic/head/%s' % data['icon']      
    item.rankId = data['rankId']#等级
    item.honor = data['honor']#当前经验
    item.influenceRank = data['influenceRank']#排名
    item.actionPoint = data['lvParaLimit']['actionPoint']#总行动力
    item.usedActPoint = data['usedActPoint']#已使用行动力
    item.intelPoint = data['intelPoint']#智力
    item.militaryPoint = data['militaryPoint']#武力
    item.polityPoint = data['polityPoint']#政治
    item.availPropertyPoint = data['availPropertyPoint']#没加的点
 
#casNum            城池数量？
#armyNumLimit        统兵上限
#constituteNum        可同时建造数量？
    return item  

@parseHelper   
def getUserCastles(data):
    ''' 
    >>> s=[{'castlePop': {'IExportKey': None, 'IRemoteObjectState': 0, 'IExportType': 10, 'userId': 83085, 'bronzePop': 0, 'moneyAddSpeed': 8400, 'key': u'CastlePopulation_87609', 'IExportOpCode': 0, 'woodPop': 0, 'labPop': 5200, 'idlePop': 1800, 'currPop': 7000, 'foodPop': 5200, 'stonePop': 0, 'casId': 87609, 'popCeil': 7000}, 'castle': {'rangeLv': 3, 'userId': 83085, 'qqType': None, 'parentCasId': 0, 'calcuDttm': datetime.datetime(2010, 9, 15, 3, 44, 8, 133000), 'IExportOpCode': 0, 'qqEndTime': None, 'quarCalcuDttm': datetime.datetime(2010, 9, 15, 3, 40, 16), 'castleType': u'main', 'casName': u'Cicii', 'preArmyNum': 2030, 'status': 0, 'operPeopleDttm': None, 'IRemoteObjectState': 0, 'rangeValue': 21260, 'branchCasTypeList': None, 'recruitDttm': datetime.datetime(2010, 9, 14, 15, 0, 0, 468000), 'todayLost': 0, 'casLv': 3, 'iconPath': u'chengchi2.swf', 'casId': 87609, 'occuFlagTime': None, 'changeCountryDttm': None, 'rangeCeil': 21260, 'isDefaultView': u'\u662f', 'stateId': 38, 'entityCapacity': {'capDesc': u'', 'entId': 90000004, 'level': 3, 'para2': 0, 'para1': 0, 'iconPath': u'chengchi2.swf', 'capacity': -1, 'type1': u'', 'type2': u''}, 'robbedTimes': 0, 'posX': 834, 'posY': 1938, 'addCurrLv': None, 'addHonorMissionDttm': None}, 'castleRes': {'IExportKey': None, 'IRemoteObjectState': 0, 'moneyNum': 2500000, 'IExportType': 7, 'bankCapacity': 2500000, 'foodNum': 177189, 'userId': 83085, 'bronzeNum': 153119, 'cashNum': 0, 'key': u'CastleResource_87609', 'IExportOpCode': 0, 'wareCapacity': 320000, 'stoneNum': 170935, 'changeExpNum': 0, 'lastChangeDttm': None, 'lastBuyDttm': datetime.datetime(2010, 8, 25, 12, 55, 16), 'woodNum': 103097, 'casId': 87609}}]
    >>> getUserCastles(s).casId
    87609
    '''
    item = Item()
    item.casId = data[0]['castle']['casId']
    return item

@parseHelper   
def listCastleBuilding(data):
    ''' 
    >>> data={'serverCurrTime': 1284601616845.0, 'rangeLv': 3, 'casLv': 3, 'castleIcon': u'chengchi2.swf', 'buiList': [{'building': {'buiName': u'\u4e66\u9662', 'entId': 10113001, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u4e66\u9662(\u552f\u4e00\u7684)\u7528\u4e8e\u7814\u7a76\u79d1\u6280\uff0c\u5bf9\u5185\u653f\u548c\u519b\u4e8b\u90fd\u6709\u91cd\u5927\u5f71\u54cd\u3002\u5347\u7ea7\u4e66\u9662\uff0c\u80fd\u591f\u5c06\u79d1\u6280\u7814\u7a76\u5230\u66f4\u9ad8\u7b49\u7ea7\u3002', 'iconPath': None, 'property': u'\u79d1\u6280\u7814\u7a76\u901f\u5ea6', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1115716, 'posNo': u'C8', 'level': 9, 'IExportType': 12, 'buiDesc': u'9\u7ea7\u4e66\u9662\u4f7f\u79d1\u6280\u7814\u7a76\u901f\u5ea6\u589e\u52a04.5\u500d', 'userId': 83085, 'inBuiDesc': u'\u4e66\u9662(\u552f\u4e00\u7684)\u7528\u4e8e\u7814\u7a76\u79d1\u6280\uff0c\u5bf9\u5185\u653f\u548c\u519b\u4e8b\u90fd\u6709\u91cd\u5927\u5f71\u54cd\u3002\u5347\u7ea7\u4e66\u9662\uff0c\u80fd\u591f\u5c06\u79d1\u6280\u7814\u7a76\u5230\u66f4\u9ad8\u7b49\u7ea7\u30029\u7ea7\u4e66\u9662\u4f7f\u79d1\u6280\u7814\u7a76\u901f\u5ea6\u589e\u52a04.5\u500d', 'iconPath': u'\u4e66\u96622.png', 'buiEntId': 10113001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u4ed3\u5e93', 'entId': 10110002, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u4ed3\u5e93(\u552f\u4e00\u7684)\u7528\u6765\u5b58\u653e\u8d44\u6e90\uff0c\u5305\u62ec\u7cae\u98df\u3001\u6728\u6750\u3001\u77f3\u6599\u548c\u9752\u94dc\u3002', 'iconPath': None, 'property': u'\u4ed3\u5e93\u5bb9\u91cf', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1115366, 'posNo': u'C7', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u4ed3\u5e93\u53ef\u5b58\u653e\u7cae\u98df\u3001\u6728\u6750\u3001\u77f3\u6599\u3001\u9752\u94dc\u540432\u4e07', 'userId': 83085, 'inBuiDesc': u'\u4ed3\u5e93(\u552f\u4e00\u7684)\u7528\u6765\u5b58\u653e\u8d44\u6e90\uff0c\u5305\u62ec\u7cae\u98df\u3001\u6728\u6750\u3001\u77f3\u6599\u548c\u9752\u94dc\u30026\u7ea7\u4ed3\u5e93\u53ef\u5b58\u653e\u7cae\u98df\u3001\u6728\u6750\u3001\u77f3\u6599\u3001\u9752\u94dc\u540432\u4e07', 'iconPath': u'\u4ed3\u5e932.png', 'buiEntId': 10110002, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u9152\u9986', 'entId': 10114001, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u9152\u9986(\u552f\u4e00\u7684)\u5e38\u4f1a\u5f15\u6765\u4e00\u4e9b\u5929\u8d4b\u5f02\u7980\u4e4b\u58eb\uff0c\u5f62\u5f62\u8272\u8272\uff0c\u5404\u6709\u6240\u957f\u3002\u53ef\u4ee5\u5c06\u5176\u7eb3\u5165\u9ebe\u4e0b\uff0c\u5171\u521b\u4e00\u756a\u9738\u4e1a\u3002\u5347\u7ea7\u9152\u9986\u53ef\u4f7f\u9ad8\u6210\u957f\u6b66\u5c06\u51fa\u73b0\u673a\u4f1a\u589e\u5927\uff0c\u968f\u673a\u4e8b\u4ef6\u4e5f\u4f1a\u589e\u591a\u3002', 'iconPath': None, 'property': u'\u968f\u673a\u4e8b\u4ef6\u9891\u5ea6', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1117017, 'posNo': u'C9', 'level': 7, 'IExportType': 12, 'buiDesc': u'7\u7ea7\u9152\u9986\u7684\u6b66\u5c06\u5237\u65b0\u901f\u5ea6\u4e3a2\u5c0f\u65f655\u5206', 'userId': 83085, 'inBuiDesc': u'\u9152\u9986(\u552f\u4e00\u7684)\u5e38\u4f1a\u5f15\u6765\u4e00\u4e9b\u5929\u8d4b\u5f02\u7980\u4e4b\u58eb\uff0c\u5f62\u5f62\u8272\u8272\uff0c\u5404\u6709\u6240\u957f\u3002\u53ef\u4ee5\u5c06\u5176\u7eb3\u5165\u9ebe\u4e0b\uff0c\u5171\u521b\u4e00\u756a\u9738\u4e1a\u3002\u5347\u7ea7\u9152\u9986\u53ef\u4f7f\u9ad8\u6210\u957f\u6b66\u5c06\u51fa\u73b0\u673a\u4f1a\u589e\u5927\uff0c\u968f\u673a\u4e8b\u4ef6\u4e5f\u4f1a\u589e\u591a\u30027\u7ea7\u9152\u9986\u7684\u6b66\u5c06\u5237\u65b0\u901f\u5ea6\u4e3a2\u5c0f\u65f655\u5206', 'iconPath': u'\u9152\u99862.png', 'buiEntId': 10114001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u6c11\u5c45', 'entId': 10110001, 'entType': None, 'numLimit': 15, 'buiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u53ef\u5bb9\u7eb3\u4eba\u53e3', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1115237, 'posNo': u'C4', 'level': 7, 'IExportType': 12, 'buiDesc': u'7\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'userId': 83085, 'inBuiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30027\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'iconPath': u'\u6c11\u5c452.png', 'buiEntId': 10110001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u4fee\u70bc\u9986', 'entId': 10114003, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u4fee\u70bc\u9986(\u552f\u4e00\u7684)\u662f\u57f9\u517b\u6b66\u5c06\u7684\u91cd\u8981\u573a\u6240\uff0c\u4f7f\u6b66\u5c06\u4e0d\u5fc5\u5f81\u6218\u6c99\u573a\u5c31\u80fd\u5f97\u5230\u953b\u70bc\u3002\u5347\u7ea7\u4fee\u70bc\u9986\u5c06\u5141\u8bb8\u6b66\u5c06\u4fee\u70bc\u5230\u66f4\u9ad8\u7ea7\u522b\u3002', 'iconPath': None, 'property': u'\u6b66\u5c06\u4fee\u70bc\u7ecf\u9a8c\u5956\u52b1', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1137418, 'posNo': u'C3', 'level': 4, 'IExportType': 12, 'buiDesc': u'4\u7ea7\u4fee\u70bc\u9986\u5185\u6b66\u5c06\u6700\u9ad8\u53ef\u4fee\u70bc\u523016\u7ea7\uff0c\u9ad8\u7ea7\u4fee\u70bc\u4e0d\u53d7\u9650\u5236', 'userId': 83085, 'inBuiDesc': u'\u4fee\u70bc\u9986(\u552f\u4e00\u7684)\u662f\u57f9\u517b\u6b66\u5c06\u7684\u91cd\u8981\u573a\u6240\uff0c\u4f7f\u6b66\u5c06\u4e0d\u5fc5\u5f81\u6218\u6c99\u573a\u5c31\u80fd\u5f97\u5230\u953b\u70bc\u3002\u5347\u7ea7\u4fee\u70bc\u9986\u5c06\u5141\u8bb8\u6b66\u5c06\u4fee\u70bc\u5230\u66f4\u9ad8\u7ea7\u522b\u30024\u7ea7\u4fee\u70bc\u9986\u5185\u6b66\u5c06\u6700\u9ad8\u53ef\u4fee\u70bc\u523016\u7ea7\uff0c\u9ad8\u7ea7\u4fee\u70bc\u4e0d\u53d7\u9650\u5236', 'iconPath': u'\u6b66\u99861.png', 'buiEntId': 10114003, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u6c11\u5c45', 'entId': 10110001, 'entType': None, 'numLimit': 15, 'buiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u53ef\u5bb9\u7eb3\u4eba\u53e3', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1126355, 'posNo': u'C6', 'level': 7, 'IExportType': 12, 'buiDesc': u'7\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'userId': 83085, 'inBuiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30027\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'iconPath': u'\u6c11\u5c452.png', 'buiEntId': 10110001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u519b\u8425', 'entId': 10112001, 'entType': None, 'numLimit': 12, 'buiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u63d0\u4f9b\u65b0\u5175\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1956806, 'posNo': u'C28', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'userId': 83085, 'inBuiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'iconPath': u'\u6b65\u5175\u84252.png', 'buiEntId': 10112001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u6c11\u5c45', 'entId': 10110001, 'entType': None, 'numLimit': 15, 'buiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u53ef\u5bb9\u7eb3\u4eba\u53e3', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1126341, 'posNo': u'C5', 'level': 7, 'IExportType': 12, 'buiDesc': u'7\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'userId': 83085, 'inBuiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30027\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'iconPath': u'\u6c11\u5c452.png', 'buiEntId': 10110001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u5b98\u5e9c', 'entId': 10111001, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u5b98\u5e9c\u662f\u57ce\u6c60\u53d1\u5c55\u7684\u6807\u5fd7\uff0c\u5b98\u5e9c\u6bcf\u589e\u52a0\u4e00\u7ea7\u53ef\u589e\u52a050%\u7684\u5efa\u7b51\u57fa\u7840\u5efa\u9020\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1110844, 'posNo': u'N100', 'level': 9, 'IExportType': 12, 'buiDesc': u'9\u7ea7\u5b98\u5e9c\u7684\u94dc\u5e01\u5b58\u50a8\u4e0a\u9650\u4e3a250\u4e07', 'userId': 83085, 'inBuiDesc': u'\u5b98\u5e9c\u662f\u57ce\u6c60\u53d1\u5c55\u7684\u6807\u5fd7\uff0c\u5b98\u5e9c\u6bcf\u589e\u52a0\u4e00\u7ea7\u53ef\u589e\u52a050%\u7684\u5efa\u7b51\u57fa\u7840\u5efa\u9020\u901f\u5ea6\u30029\u7ea7\u5b98\u5e9c\u7684\u94dc\u5e01\u5b58\u50a8\u4e0a\u9650\u4e3a250\u4e07', 'iconPath': u'\u5b98\u5e9c2.png', 'buiEntId': 10111001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u519b\u8425', 'entId': 10112001, 'entType': None, 'numLimit': 12, 'buiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u63d0\u4f9b\u65b0\u5175\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1956714, 'posNo': u'C23', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'userId': 83085, 'inBuiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'iconPath': u'\u6b65\u5175\u84252.png', 'buiEntId': 10112001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u519b\u8425', 'entId': 10112001, 'entType': None, 'numLimit': 12, 'buiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u63d0\u4f9b\u65b0\u5175\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1144620, 'posNo': u'C21', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'userId': 83085, 'inBuiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'iconPath': u'\u6b65\u5175\u84252.png', 'buiEntId': 10112001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u519b\u8425', 'entId': 10112001, 'entType': None, 'numLimit': 12, 'buiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u63d0\u4f9b\u65b0\u5175\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1956685, 'posNo': u'C22', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'userId': 83085, 'inBuiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'iconPath': u'\u6b65\u5175\u84252.png', 'buiEntId': 10112001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u57ce\u5899', 'entId': 10112006, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u9ad8\u7b51\u5899\u3001\u5e7f\u79ef\u7cae\uff0c\u4e0d\u5931\u4e3a\u751f\u5b58\u5728\u4e71\u4e16\u7684\u597d\u7b56\u7565\u3002\u57ce\u5899\u4e0a\u53ef\u4ee5\u4fee\u5efa\u5404\u79cd\u57ce\u9632\u5de5\u4e8b\uff0c\u5e76\u8bbe\u5b9a\u7559\u5b88\u57ce\u6c60\u7684\u90e8\u961f\u3002\u57ce\u5899\u6bcf\u589e\u52a0\u4e00\u7ea7\u57ce\u9632\u5236\u9020\u901f\u5ea6\u589e\u52a05%\u3002', 'iconPath': None, 'property': u'', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1110845, 'posNo': u'N101', 'level': 8, 'IExportType': 12, 'buiDesc': u'8\u7ea7\u57ce\u5899\u57fa\u7840\u8010\u4e45640\u4e07\uff0c\u53ef\u5bb9\u7eb3\u57ce\u96321600', 'userId': 83085, 'inBuiDesc': u'\u9ad8\u7b51\u5899\u3001\u5e7f\u79ef\u7cae\uff0c\u4e0d\u5931\u4e3a\u751f\u5b58\u5728\u4e71\u4e16\u7684\u597d\u7b56\u7565\u3002\u57ce\u5899\u4e0a\u53ef\u4ee5\u4fee\u5efa\u5404\u79cd\u57ce\u9632\u5de5\u4e8b\uff0c\u5e76\u8bbe\u5b9a\u7559\u5b88\u57ce\u6c60\u7684\u90e8\u961f\u3002\u57ce\u5899\u6bcf\u589e\u52a0\u4e00\u7ea7\u57ce\u9632\u5236\u9020\u901f\u5ea6\u589e\u52a05%\u30028\u7ea7\u57ce\u5899\u57fa\u7840\u8010\u4e45640\u4e07\uff0c\u53ef\u5bb9\u7eb3\u57ce\u96321600', 'iconPath': u'', 'buiEntId': 10112006, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u519b\u8425', 'entId': 10112001, 'entType': None, 'numLimit': 12, 'buiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u63d0\u4f9b\u65b0\u5175\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1144605, 'posNo': u'C20', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'userId': 83085, 'inBuiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'iconPath': u'\u6b65\u5175\u84252.png', 'buiEntId': 10112001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u6c11\u5c45', 'entId': 10110001, 'entType': None, 'numLimit': 15, 'buiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u53ef\u5bb9\u7eb3\u4eba\u53e3', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1122237, 'posNo': u'C1', 'level': 7, 'IExportType': 12, 'buiDesc': u'7\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'userId': 83085, 'inBuiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30027\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'iconPath': u'\u6c11\u5c452.png', 'buiEntId': 10110001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u6c11\u5c45', 'entId': 10110001, 'entType': None, 'numLimit': 15, 'buiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u53ef\u5bb9\u7eb3\u4eba\u53e3', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1122136, 'posNo': u'C2', 'level': 7, 'IExportType': 12, 'buiDesc': u'7\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'userId': 83085, 'inBuiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30027\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3700', 'iconPath': u'\u6c11\u5c452.png', 'buiEntId': 10110001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u6c11\u5c45', 'entId': 10110001, 'entType': None, 'numLimit': 15, 'buiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u53ef\u5bb9\u7eb3\u4eba\u53e3', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1956663, 'posNo': u'C16', 'level': 5, 'IExportType': 12, 'buiDesc': u'5\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3500', 'userId': 83085, 'inBuiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30025\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3500', 'iconPath': u'\u6c11\u5c452.png', 'buiEntId': 10110001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u519b\u8425', 'entId': 10112001, 'entType': None, 'numLimit': 12, 'buiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u63d0\u4f9b\u65b0\u5175\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1915005, 'posNo': u'C17', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'userId': 83085, 'inBuiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'iconPath': u'\u6b65\u5175\u84252.png', 'buiEntId': 10112001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u6c11\u5c45', 'entId': 10110001, 'entType': None, 'numLimit': 15, 'buiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u53ef\u5bb9\u7eb3\u4eba\u53e3', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1914956, 'posNo': u'C18', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3600', 'userId': 83085, 'inBuiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3600', 'iconPath': u'\u6c11\u5c452.png', 'buiEntId': 10110001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u519b\u8425', 'entId': 10112001, 'entType': None, 'numLimit': 12, 'buiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u63d0\u4f9b\u65b0\u5175\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1144689, 'posNo': u'C19', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'userId': 83085, 'inBuiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3240\u65b0\u5175', 'iconPath': u'\u6b65\u5175\u84252.png', 'buiEntId': 10112001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u5e02\u573a', 'entId': 10116001, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u5e02\u573a(\u552f\u4e00\u7684)\u662f\u4e0e\u76df\u53cb\u8fdb\u884c\u8dd1\u5546\u4ea4\u6613\u7684\u573a\u6240\u3002', 'iconPath': None, 'property': u'\u8dd1\u5546\u8d27\u7269\u7684\u4f9b\u5e94\u548c\u9700\u6c42\u6570\u91cf', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1137153, 'posNo': u'C10', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u5e02\u573a\u5546\u961f\u8fd0\u8f7d\u91cf\u4e3a600', 'userId': 83085, 'inBuiDesc': u'\u5e02\u573a(\u552f\u4e00\u7684)\u662f\u4e0e\u76df\u53cb\u8fdb\u884c\u8dd1\u5546\u4ea4\u6613\u7684\u573a\u6240\u30026\u7ea7\u5e02\u573a\u5546\u961f\u8fd0\u8f7d\u91cf\u4e3a600', 'iconPath': u'\u5e02\u573a2.png', 'buiEntId': 10116001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u5916\u4f7f\u9662', 'entId': 10117001, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u5916\u4f7f\u9662(\u552f\u4e00\u7684)\u662f\u52a0\u5165\u6216\u5efa\u7acb\u8054\u76df\u7684\u5fc5\u8981\u5efa\u7b51\u3002', 'iconPath': None, 'property': u'\u540c\u76df\u76ee\u6807\u884c\u519b\u901f\u5ea6', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1134185, 'posNo': u'C11', 'level': 4, 'IExportType': 12, 'buiDesc': u'4\u7ea7\u5916\u4f7f\u9662\u4f7f\u76df\u53cb\u5411\u672c\u57ce\u6d3e\u9063\u519b\u961f\u7684\u884c\u519b\u901f\u5ea6\u589e\u52a040%', 'userId': 83085, 'inBuiDesc': u'\u5916\u4f7f\u9662(\u552f\u4e00\u7684)\u662f\u52a0\u5165\u6216\u5efa\u7acb\u8054\u76df\u7684\u5fc5\u8981\u5efa\u7b51\u30024\u7ea7\u5916\u4f7f\u9662\u4f7f\u76df\u53cb\u5411\u672c\u57ce\u6d3e\u9063\u519b\u961f\u7684\u884c\u519b\u901f\u5ea6\u589e\u52a040%', 'iconPath': u'\u9e3f\u80ea\u5bfa1.png', 'buiEntId': 10117001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u94c1\u5320\u94fa', 'entId': 10116002, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u94c1\u5320\u94fa(\u552f\u4e00\u7684)\u80fd\u8d2d\u4e70\u4e00\u4e9b\u521d\u7ea7\u88c5\u5907\uff0c\u60a8\u4e5f\u53ef\u4ee5\u628a\u4e00\u4e9b\u591a\u4f59\u7684\u88c5\u5907\u6216\u6750\u6599\u5356\u6389\u3002\u5347\u7ea7\u94c1\u5320\u94fa\u80fd\u6253\u9020\u51fa\u66f4\u591a\u79cd\u7c7b\u7684\u88c5\u5907\u3002\u5982\u679c\u60a8\u6709\u7a00\u6709\u6750\u6599\u7684\u8bdd\uff0c\u4e5f\u8bb8\u94c1\u5320\u80fd\u8ba9\u60a8\u7684\u88c5\u5907\u66f4\u52a0\u5f3a\u529b\u3002', 'iconPath': None, 'property': u'\u57ce\u5899\u88c5\u8f7d\u57ce\u9632\u7684\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1129018, 'posNo': u'C12', 'level': 6, 'IExportType': 12, 'buiDesc': u'\u670b\u53cb\uff0c\u4f60\u6709\u864e\u7b26\u5417\uff1f\u90a3\u4e1c\u897f\u4e00\u5b9a\u4f1a\u5356\u4e2a\u597d\u4ef7\u94b1\u3002', 'userId': 83085, 'inBuiDesc': u'\u94c1\u5320\u94fa(\u552f\u4e00\u7684)\u80fd\u8d2d\u4e70\u4e00\u4e9b\u521d\u7ea7\u88c5\u5907\uff0c\u60a8\u4e5f\u53ef\u4ee5\u628a\u4e00\u4e9b\u591a\u4f59\u7684\u88c5\u5907\u6216\u6750\u6599\u5356\u6389\u3002\u5347\u7ea7\u94c1\u5320\u94fa\u80fd\u6253\u9020\u51fa\u66f4\u591a\u79cd\u7c7b\u7684\u88c5\u5907\u3002\u5982\u679c\u60a8\u6709\u7a00\u6709\u6750\u6599\u7684\u8bdd\uff0c\u4e5f\u8bb8\u94c1\u5320\u80fd\u8ba9\u60a8\u7684\u88c5\u5907\u66f4\u52a0\u5f3a\u529b\u3002\u670b\u53cb\uff0c\u4f60\u6709\u864e\u7b26\u5417\uff1f\u90a3\u4e1c\u897f\u4e00\u5b9a\u4f1a\u5356\u4e2a\u597d\u4ef7\u94b1\u3002', 'iconPath': u'\u94c1\u5320\u94fa2.swf', 'buiEntId': 10116002, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u519b\u8425', 'entId': 10112001, 'entType': None, 'numLimit': 12, 'buiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u63d0\u4f9b\u65b0\u5175\u6570\u91cf\u4e0a\u9650', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1119618, 'posNo': u'C13', 'level': 8, 'IExportType': 12, 'buiDesc': u'8\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3350\u65b0\u5175', 'userId': 83085, 'inBuiDesc': u'\u519b\u8425(\u4e3b\u57ce\u6700\u591a12\u4e2a)\u7528\u4e8e\u8bad\u7ec3\u548c\u9063\u6563\u58eb\u5175\u3002\u5efa\u9020\u548c\u5347\u7ea7\u519b\u8425\u80fd\u591f\u63d0\u9ad8\u65b0\u5175\u7684\u6570\u91cf\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30028\u7ea7\u519b\u8425\u53ef\u5bb9\u7eb3350\u65b0\u5175', 'iconPath': u'\u6b65\u5175\u84252.png', 'buiEntId': 10112001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u533b\u9986', 'entId': 10115002, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u751f\u5b58\u4e8e\u4e71\u4e16\uff0c\u5e94\u505a\u597d\u635f\u5175\u6298\u5c06\u7684\u51c6\u5907\u3002\u533b\u9986(\u552f\u4e00\u7684)\u80fd\u591f\u533b\u6cbb\u6b66\u5c06\uff0c\u4f7f\u5176\u5728\u6218\u573a\u4e0a\u53d1\u6325\u767e\u5206\u4e4b\u767e\u7684\u6218\u529b\u3002\u4f11\u606f\u4e2d\u7684\u6b66\u5c06\u4e0d\u533b\u6cbb\u4e5f\u4f1a\u7f13\u6162\u6062\u590d\u5065\u5eb7\u3002\u5347\u7ea7\u533b\u9986\u80fd\u71ac\u5236\u66f4\u591a\u818f\u836f\u3002', 'iconPath': None, 'property': u'\u533b\u7597\u70b9\u6570', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1127822, 'posNo': u'C14', 'level': 5, 'IExportType': 12, 'buiDesc': u'5\u7ea7\u533b\u9986\u6700\u591a\u53ef\u5b58\u653e200\u526f\u818f\u836f', 'userId': 83085, 'inBuiDesc': u'\u751f\u5b58\u4e8e\u4e71\u4e16\uff0c\u5e94\u505a\u597d\u635f\u5175\u6298\u5c06\u7684\u51c6\u5907\u3002\u533b\u9986(\u552f\u4e00\u7684)\u80fd\u591f\u533b\u6cbb\u6b66\u5c06\uff0c\u4f7f\u5176\u5728\u6218\u573a\u4e0a\u53d1\u6325\u767e\u5206\u4e4b\u767e\u7684\u6218\u529b\u3002\u4f11\u606f\u4e2d\u7684\u6b66\u5c06\u4e0d\u533b\u6cbb\u4e5f\u4f1a\u7f13\u6162\u6062\u590d\u5065\u5eb7\u3002\u5347\u7ea7\u533b\u9986\u80fd\u71ac\u5236\u66f4\u591a\u818f\u836f\u30025\u7ea7\u533b\u9986\u6700\u591a\u53ef\u5b58\u653e200\u526f\u818f\u836f', 'iconPath': u'\u533b\u99862.png', 'buiEntId': 10115002, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}, {'building': {'buiName': u'\u6c11\u5c45', 'entId': 10110001, 'entType': None, 'numLimit': 15, 'buiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u3002', 'iconPath': None, 'property': u'\u53ef\u5bb9\u7eb3\u4eba\u53e3', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'FINISH', 'casBuiId': 1539456, 'posNo': u'C15', 'level': 6, 'IExportType': 12, 'buiDesc': u'6\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3600', 'userId': 83085, 'inBuiDesc': u'\u6c11\u5c45(\u4e3b\u57ce\u6700\u591a15\u4e2a)\u4e3a\u57ce\u6c60\u4e2d\u7684\u4eba\u53e3\u63d0\u4f9b\u4f4f\u6240\u3002\u5efa\u9020\u548c\u5347\u7ea7\u6c11\u5c45\u80fd\u591f\u63d0\u9ad8\u4eba\u53e3\u7684\u4e0a\u9650\u548c\u589e\u957f\u901f\u5ea6\u30026\u7ea7\u6c11\u5c45\u53ef\u5bb9\u7eb3\u4eba\u53e3600', 'iconPath': u'\u6c11\u5c452.png', 'buiEntId': 10110001, 'casId': 87609, 'isBuilding': -1, 'IExportOpCode': 0}]}
    >>> listCastleBuilding(data)[0].casBuiId
    1115716
    >>> listCastleBuilding(data)[1].casBuiId
    1115366
    >>> listCastleBuilding(data)[0].posNo
    u'C8'
    >>> listCastleBuilding(data)[0].isBuilding
    -1
    >>> listCastleBuilding(data)[0].casId
    87609
    '''
    r = []
    for build in data['buiList']:
        item = Item()
        item.casBuiId = build['casBuiId']
        item.buiName = build['building']['buiName']
        item.level = build['level'] 
        item.posNo = build['posNo']
        item.isBuilding = build['isBuilding']
        item.casId = build['casId']
        r.append(item)  
    return r

@parseHelper   
def refreshCasBui(data):
    ''' 
    >>> s={'building': {'buiName': u'\u4fee\u70bc\u9986', 'entId': 10114003, 'entType': None, 'numLimit': 1, 'buiDesc': u'\u4fee\u70bc\u9986(\u552f\u4e00\u7684)\u662f\u57f9\u517b\u6b66\u5c06\u7684\u91cd\u8981\u573a\u6240\uff0c\u4f7f\u6b66\u5c06\u4e0d\u5fc5\u5f81\u6218\u6c99\u573a\u5c31\u80fd\u5f97\u5230\u953b\u70bc\u3002\u5347\u7ea7\u4fee\u70bc\u9986\u5c06\u5141\u8bb8\u6b66\u5c06\u4fee\u70bc\u5230\u66f4\u9ad8\u7ea7\u522b\u3002', 'iconPath': None, 'property': u'\u6b66\u5c06\u4fee\u70bc\u7ecf\u9a8c\u5956\u52b1', 'maxLevel': 30, 'castleType': u'main'}, 'status': u'BUILDING', 'rang': 140, 'remainSeconds': 630.0, 'posNo': u'C3', 'level': 4, 'endDttm': u'2010-09-16 14:15:17', 'buiDesc': u'4\u7ea7\u4fee\u70bc\u9986\u5185\u6b66\u5c06\u6700\u9ad8\u53ef\u4fee\u70bc\u523016\u7ea7\uff0c\u9ad8\u7ea7\u4fee\u70bc\u4e0d\u53d7\u9650\u5236', 'honor': 14, 'inBuiDesc': u'\u4fee\u70bc\u9986(\u552f\u4e00\u7684)\u662f\u57f9\u517b\u6b66\u5c06\u7684\u91cd\u8981\u573a\u6240\uff0c\u4f7f\u6b66\u5c06\u4e0d\u5fc5\u5f81\u6218\u6c99\u573a\u5c31\u80fd\u5f97\u5230\u953b\u70bc\u3002\u5347\u7ea7\u4fee\u70bc\u9986\u5c06\u5141\u8bb8\u6b66\u5c06\u4fee\u70bc\u5230\u66f4\u9ad8\u7ea7\u522b\u30024\u7ea7\u4fee\u70bc\u9986\u5185\u6b66\u5c06\u6700\u9ad8\u53ef\u4fee\u70bc\u523016\u7ea7\uff0c\u9ad8\u7ea7\u4fee\u70bc\u4e0d\u53d7\u9650\u5236', 'iconPath': u'\u6b66\u99861.png', 'isBuilding': 630.0, 'buildingType': 1, 'casBuiId': 1137418}
    >>> refreshCasBui(s).isBuilding
    630.0
    '''
    item = Item()
    item.isBuilding = data['isBuilding']
    return item

@parseHelper   
def getEndTime(data):
    ''' 
    >>> s={'missionName': u'\u7ef4\u62a4\u6cbb\u5b89', 'timeDis': 898.0, 'theStatus': 3} 
    >>> getEndTime(s).timeDis
    898.0
    '''
    item = Item()
    if data:   
        item.timeDis = data.get('timeDis', -1)
        item.missionName = data.get('missionName', '')
    else:
        item.timeDis = -1     
    return item

@parseHelper   
def getUserDailyMissionList(data, index):
    ''' 
    >>> s=[{'status': u'processing', 'dMId': 2, 'uDmId': 232999, 'IExportType': 17, 'IExportOpCode': 0, 'userId': 40777, 'timeDis': 899.0}]
    >>> getUserDailyMissionList(s,2).timeDis
    899.0
    '''
    item = Item()
    for d in data:
        if d['dMId'] == index:
            timeDis = d['timeDis'] 
    item.timeDis = timeDis     
    return item

if __name__ == '__main__':
    import doctest
    doctest.testmod()
